package net.sxnic.workflow.node;

import java.util.List;

import net.sxinfo.core.spring25.Manager;
import net.sxnic.workflow.pd.Pd;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface NodeManager extends Manager<Node, String>{
	
	/**
	 * 根据pd和节点名称，查询最新pd的指定节点
	 * @param pd pd
	 * @param name 节点名称
	 * @return
	 */
	Node findByPdName(Pd pd,String name);
	
	/**
	 * 根据pdName和节点名称，查询最新pdName的指定节点
	 * @param pdName
	 * @param name 节点名称
	 * @return
	 */
	Node findByPdName(String pdName,String name);
	
	/**
	 * 根据给定pd和节点名称，查询所有当前节点的所有后续节点
	 * @param pd 
	 * @param currNodeName 节点名称
	 * @return
	 */
	List<Node> findNextNodes(Pd pd,String currNodeName);
	
	/**
	 * 根据给定pd和节点名称，查询所有当前节点的所有后续节点
	 * @param pd 
	 * @param currNodeName 节点名称
	 * @return
	 */
	List<Node> findNextNodes(String pdName,String currNodeName);
	
	/**
	 * 查询给定流程的第一个节点
	 * @param pd 
	 * @param currNodeName 节点名称
	 * @return
	 */
	Node findStartNode(String pdName);
	
	/**
	 * 查询给定流程的第一个节点
	 * @param pd 
	 * @param currNodeName 节点名称
	 * @return
	 */
	Node findStartNode(Pd pd);
	
	/**
	 * 根据流程名和节点名查询NodeConfig实体
	 * @param processName 流程名
	 * @param nodeName 节点名
	 * @return NodeConfig实体，如果没有则返回null。
	 */
	Node findByProcessNameNodeName(String processName, String nodeName);
	
	/**
	 * 根据 流程定义name 和 当前节点名称 查询后续节点的用户名序列。
	 * <p>
	 * 用户的格式 批办：领导1,领导2
	 * <p>
	 * 或者： 批办:领导1,领导2 & 承办:处长1,处长2
	 * 
	 * @param pdName
	 * @param currNodeName
	 * @return
	 */
	String findtNextAssigneeByNode(Node node);
	
	
	/**
	 * 根据 流程定义name 和 当前节点名称 查询当前节点的用户名序列。
	 * <p>
	 * 用户的格式 批办：领导1,领导2
	 * <p>
	 * 或者： 批办:领导1,领导2 & 承办:处长1,处长2
	 * 
	 * @param pdName
	 * @param currNodeName
	 * @return
	 */
	String[] findAssigneeByProcessNode(String pdName, String currNodeName);
	
	
	

}
